JavaBean属性拷贝 您所在的位置:网站首页 java bean 复制 JavaBean属性拷贝

JavaBean属性拷贝

2023-10-25 08:10| 来源: 网络整理| 查看: 265

需求

有两个类,他们属性数据类型相同,但名字不同,如何数据的拷贝?

举例:

我们在Service层可能用到的是 UserDTO 类,而页面需要的是 UserVO,我们需要将这个 UserDTO 变成 UserVO 怎么做?

笨方法:

先 UserVO  vo = new UserVo(),然后调用 vo.setXXX(dto.getXXX()) 挨个往属性中赋值。

这种方法在 属性少的情况下或许还没什么问题。但是如果需要拷贝对象的属性非常多,且有的属性是集合类型的,这种笨方法处理起来就非常的麻烦了

实验案例 定义2个类

UserDTO 类

@Data @NoArgsConstructor @AllArgsConstructor public class UserDTO { private String userName; private Integer userAge; private Integer weight; }

UserVO类

@Data @NoArgsConstructor @AllArgsConstructor public class UserVO { private String name; private Integer age; private Integer weight; } 定义一个函数式接口 @FunctionalInterface public interface BeanUtilCopyCallBack { /** * 定义默认回调方法 * @param t * @param s */ void callBack(S t, T s); } 定义属性拷贝的工具类 public class BeanUtilCopy extends BeanUtils { /** * 集合数据的拷贝 * * @param sources: 数据源类 * @param target: 目标类::new(eg: UserVO::new) * @return */ public static List copyListProperties(List sources, Supplier target) { return copyListProperties(sources, target, null); } /** * 带回调函数的集合数据的拷贝(可自定义字段拷贝规则) * * @param sources: 数据源类 * @param target: 目标类::new(eg: UserVO::new) * @param callBack: 回调函数 * @return */ public static List copyListProperties(List sources, Supplier target, BeanUtilCopyCallBack callBack) { List list = new ArrayList(sources.size()); for (S source : sources) { T t = target.get(); copyProperties(source, t); list.add(t); if (callBack != null) { // 回调 callBack.callBack(source, t); } } return list; } } 编写测试用例 @Test public void contextLoads(){ List userDTOList = new ArrayList(); userDTOList.add(new UserDTO("zhangsan", 19, 200)); userDTOList.add(new UserDTO("lisi", 20, 300)); List userVOList = BeanUtilCopy.copyListProperties(userDTOList, UserVO::new, (userDTO, userVO) -> { userVO.setName(userDTO.getUserName()); userVO.setAge(userDTO.getUserAge()); }); System.out.println(userVOList); }

测试结果

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有